BoxLang 🚀 A New JVM Dynamic Language Learn More...

qb

v11.0.0 Modules

qb

Build Status

Introduction

qb is a fluent query builder for CFML. It is heavily inspired by Eloquent from Laravel.

Using qb, you can:

  • Quickly scaffold simple queries
  • Make complex, out-of-order queries possible
  • Abstract away differences between database engines

Requirements

  • Adobe ColdFusion 2018+
  • Lucee 5+

Installation

Installation is easy through CommandBox and ForgeBox. Simply type box install qb to get started.

Code Samples

Compare these two examples:

// Plain old CFML
q = queryExecute("SELECT * FROM users");

// qb
query = wirebox.getInstance('QueryBuilder@qb');
q = query.from('users').get();

The differences become even more stark when we introduce more complexity:

// Plain old CFML
q = queryExecute(
    "SELECT * FROM posts WHERE published_at IS NOT NULL AND author_id IN ?",
    [ { value = '5,10,27', cfsqltype = 'CF_SQL_NUMERIC', list = true } ]
);

// qb
query = wirebox.getInstance('QueryBuilder@qb');
q = query.from('posts')
         .whereNotNull('published_at')
         .whereIn('author_id', [5, 10, 27])
         .get();

With Quick you can easily handle setting order by statements before the columns you want or join statements after a where clause:

query = wirebox.getInstance('QueryBuilder@qb');
q = query.from('posts')
         .orderBy('published_at')
         .select('post_id', 'author_id', 'title', 'body')
         .whereLike('author', 'Ja%')
         .join('authors', 'authors.id', '=', 'posts.author_id')
         .get();

// Becomes

q = queryExecute(
    "SELECT post_id, author_id, title, body FROM posts INNER JOIN authors ON authors.id = posts.author_id WHERE author LIKE ? ORDER BY published_at",
    [ { value = 'Ja%', cfsqltype = 'CF_SQL_VARCHAR', list = false, null = false } ]
);

qb enables you to explore new ways of organizing your code by letting you pass around a query builder object that will compile down to the right SQL without you having to keep track of the order, whitespace, or other SQL gotchas!

Here's a gist with an example of the powerful models you can create with this! https://gist.github.com/elpete/80d641b98025f16059f6476561d88202

SQLite Datasource Setup

To use the SQLite grammar for qb you will need to setup a datasource that connects to a SQLite database.

Install the SQLite JDBC driver

  1. Download the latest release of the SQLite JDBC Driver i.e. https://github.com/xerial/sqlite-jdbc/releases/download/3.40.0.0/sqlite-jdbc-3.40.0.0.jar

  2. Drop it in the /lib directory

  3. Configure the application to load the library by adding this line in your Application.cfc file.

    this.javaSettings = { loadPaths : [ ".\lib" ] };
    
  4. Restart the server

Configure the Datasource

You can configure your datasource for Lucee or Adobe Coldfusion using the steps below. You can also use cfconfig with CommandBox to do it automatically for you.

For both Lucee and ACF you need to set the JDBC Driver class to org.sqlite.JDBC. Then you need to specify the JDBC connection string as jdbc:sqlite: <your database path>. i.e. jdbc:sqlite: C:/data/my_database.db

Lucee

  1. Navigate to Datasources in the Lucee administrator
  2. Enter datasource name
  3. Select Type: Other - JDBC Driver
  4. Click Create
  5. Enter org.sqlite.JDBC for Class
  6. Enter the Connection String: jdbc:sqlite: <db path>
  7. Click Create

ACF

  1. Navigate to Datasources in the ACF administrator
  2. Enter the datasource name under Add New Data Source
  3. Select other for the datasource driver
  4. Click Add
  5. Enter org.sqlite.JDBC for the Driver Class
  6. Use org.sqlite.JDBC for the Driver Name
  7. Etner the JDBC URL: jdbc:sqlite: <db path>
  8. Click Submit

Full Docs

You can browse the full documentation at https://qb.ortusbooks.com

v11.0.0

13 Nov 2024 — 23:39: 23 UTC

BREAKING

  • QueryUtils: Auto boolean casting (b51aacc)

v10.0.2

31 Oct 2024 — 20:03: 18 UTC

fix

  • QueryUtils: Fix timestamp formatting losing timezone information (0679aee)

v10.0.1

08 Oct 2024 — 05:50: 33 UTC

fix

  • QueryUtils: Manually construct ISO 8601 timestamps due to lack of Adobe support (9e03360)

v10.0.0

30 Sep 2024 — 13:54: 41 UTC

BREAKING

  • *: Boxlang Certification (bebc83d)

v9.11.1

11 Sep 2024 — 22:06: 13 UTC

fix

  • QueryBuilder: Allow Raw Expressions in upsert (50fa99a)

perf

  • QueryUtils: Skip inferSqlType if user has specified a cfsqltype (1ee352e)

v9.11.0

12 Jun 2024 — 21:25: 50 UTC

feat

  • SchemaBuilder: Added ability to specify precision for timestamp datatypes (6e559ae)

v9.10.3

28 May 2024 — 15:29: 28 UTC

fix

  • QueryUtils: Fix serializing simple value bindings to JSON (2ac6b0b)

v9.10.2

16 May 2024 — 19:10: 23 UTC

fix

  • SQLCommenter: Fix caching of DBInfoCommenter (aabd75a)

v9.10.1

10 May 2024 — 23:24: 14 UTC

other

  • *: fix: Add canDebug to the null logger (4da8c4d)
  • *: fix: Correctly serialize bindings with binary data (e7220a7)

perf

  • DBInfoCommenter: Cache driver version per datasource (462adde)

v9.10.0

23 Apr 2024 — 16:10: 52 UTC

feat

  • SchemaBuilder: New addIndex method for adding indexes to existing tables (d990700)

v9.9.2

22 Apr 2024 — 23:19: 48 UTC

fix

  • SqlCommenter: Handle bindings that are simple values (3aa84ec)

v9.9.1

19 Apr 2024 — 21:12: 27 UTC

fix

  • SqlCommenter: Fix bug in new BindingsCommenter (ce3fd63)

v9.9.0

19 Apr 2024 — 18:14: 21 UTC

feat

  • SqlCommenter: Pass bindings to commenters. (753b30b)

v9.8.2

19 Apr 2024 — 17:26: 33 UTC

perf

  • QueryBuilder: Performance improvement for large recordsets (a5f2521)

v9.8.1

19 Mar 2024 — 17:14: 44 UTC

fix

  • QueryBuilder: Fix missing parseNumber function for ACF (b887a67)
  • QueryBuilder: Add alias to clone() (dcf87de)

v9.8.0

18 Mar 2024 — 16:22: 13 UTC

feat

  • QueryBuilder: Support alias renaming using withAlias (9c52313)

v9.7.1

12 Mar 2024 — 17:05: 20 UTC

fix

  • QueryBuilder: Add compilations for all join types (98e36a5)

v9.7.0

04 Mar 2024 — 23:34: 29 UTC

feat

  • QueryBuilder: Implement crossApply and outerApply for supported Grammars (6a818ee)

v9.6.1

07 Feb 2024 — 23:56: 13 UTC

fix

  • QueryBuilder: Expand type annotation of from (2b23fbb)

v9.6.0

21 Dec 2023 — 21:41: 47 UTC

feat

  • QueryBuilder: make addBindings public (7193bb4)

other

  • *: chore: pin commandbox-semantic-release to ^3.0.0 (172d60c)

v9.5.1

11 Dec 2023 — 17:45: 48 UTC

fix

  • AutoDiscover: Add MariaDB to AutoDiscover (c013e9e)

v9.5.0

23 Aug 2023 — 22:46: 32 UTC

feat

  • QueryBuilder: Add findOrFail and existsOrFail methods (96b9047)

v9.4.1

21 Jul 2023 — 14:28: 20 UTC

fix

  • OracleGrammar: Better support for Oracle Grammar in cfmigrations (40bb4a6)

v9.4.0

11 Jul 2023 — 14:03: 00 UTC

feat

  • SchemaBuilder: Allow for setting a defaultSchema (697a307)

v9.3.1

11 Jul 2023 — 11:50: 19 UTC

fix

  • MySQLGRammar: Use CHAR for GUID and UUID types in MySQL (eca0fa7)
  • queryUtils: Don't call getUtils from inside the Utils (3e80206)

v9.3.0

23 Jun 2023 — 08:16: 16 UTC

feat

  • QueryUtils: Make replaceBindings available in the Query Utils (4e0ca18)

v9.2.5

06 Jun 2023 — 22:48: 13 UTC

fix

  • QueryBuilder: Use named parameters when passing to BaseGrammar (488743b)

v9.2.4

05 Jun 2023 — 17:28: 47 UTC

fix

  • QueryUtils: Use varchar for clob when converting to a CFML query (5565fcb)

other

  • *: feat: Add query logging to QueryBuilder and SchemaBuilder instances (ce92090)
  • *: feat: Add the ability to pretend to run queries (a0a0c0b)

v9.2.3

22 May 2023 — 19:52: 04 UTC

fix

  • QueryUtils: Handle more obscure numeric SQL types (415255e)

v9.2.2

19 May 2023 — 16:06: 58 UTC

fix

  • QueryUtils: Add millisecond accuracy to inline bindings (4e29fb2)

v9.2.1

16 May 2023 — 19:31: 36 UTC

fix

  • QueryBuilder: Separate having bindings from where bindings (7661752)

v9.1.4

04 May 2023 — 17:41: 46 UTC

fix

  • SQLCommenter: CommandBox-friendly injections (ce2a118)

v9.1.3

01 May 2023 — 20:43: 47 UTC

fix

  • QueryBuilder: Add support for from bindings (7086c9e)

v9.1.2

17 Mar 2023 — 00:23: 16 UTC

chore

  • QueryBuilder: Back out of using native returntypes (63a1599)

v9.1.1

16 Mar 2023 — 21:12: 44 UTC

fix

  • QueryBuilder: Make withReturnFormat a public method (60747b8)

v9.1.0

16 Mar 2023 — 17:42: 23 UTC

feat

  • QueryBuilder: Add ability to inline bindings when calling toSQL and dump (379d1e7)

fix

  • SQLCommenter: Move coldbox namespace injection to the function body (b6248d4)
  • QueryBuilder: Correctly apply native returntypes after newQuery and withReturnFormat (20416c3)

v9.0.2

14 Mar 2023 — 16:45: 46 UTC

fix

  • QueryBuilder: Fix losing defaultOptions when calling newQuery (4e713d4)
  • QueryBuilder: Allow for native struct returntypes (a2e088d)

v9.0.1

17 Feb 2023 — 05:53: 38 UTC

fix

  • SQLCommenter: Rename RouteInfoCommenter.cfc.cfc to RouteInfoCommenter.cfc (bf33c1a)

v9.0.0

06 Feb 2023 — 18:01: 42 UTC

BREAKING

  • QueryUtils: Turn on strictDateDetection by default (6150975)
  • compat: Drop support for ACF 2016 (54b65c0)
  • SchemaBuilder: Separate UUID and GUID to reduce confusion (b6024f1)
  • QueryBuilder: Automatic where scoping with OR clauses in when callbacks (0d6292d)
  • QueryUtils: Improve numeric sqltype detection (74649bd)
  • QueryBuilder: Add pagination collectors to qb (4b2d85f)
  • MSSQLGrammar: Rename MSSQLGrammar to SqlServerGrammar (ea94494)
  • QueryBuilder: Rename callback to query for subSelect (87b27f5)
  • QueryBuilder: Expand closure and builder argument options (e002d94)
  • QueryBuilder: Add defaultValue and optional exception to value (ec23bb7)
  • ModuleConfig: Use full setting for WireBox mapping (1e14099)
  • QueryBuilder: Remove variadic parameter support (8690fcf)
  • *: refactor: Drop support for ACF 11 and Lucee 4.5 (9dbeaf3)
  • SchemaBuilder: Use uniqueidentifier for MSSQL uuid() (1b2d456)

build

  • travis: Use openjdk for builds (061e9d0)

chore

  • tests: Update tests for new autoDeriveNumericType default (0341edb)
  • CI: Do not fail fast in CI test runs (250626f)
  • ci: Update setup-java action to latest (91456bf)
  • CI: Update GHA to avoid deprecated output syntax (#236) (8d757e2)
  • BaseGrammar: Update announceInterception calls for ColdBox 7 (6f45d1f)
  • Release: Fix artifact commit process during release (2c7d3eb)
  • CI: Remove ColdBox as a test dependency (9fa95ca)
  • CI: Test with full null support (98b0df9)
  • SchemaBuilder: Add types to SchemaBuilder classes (57e9c7d)
  • CI: Swap to main branch (6c94e46)
  • Utils: Remove injection for QueryUtils (bac94a5)
  • CI: Fix reference to version number in subsequent step (7199c25)
  • CI: Publish docs to S3 (82dbfde)
  • CI: Use commandbox-docbox to generate API docs (0747b13)
  • CI: Update workflow for API docs (7e28504)
  • CI: Migrate Travis to GitHub Actions (ce5457a)
  • Format: Format with cfformat (77af3ee)
  • format: Always use lf for new lines (707a288)
  • CI: Testing coldbox@be makes no sense as it's all unit tests (8b335da)
  • CI: Add coldbox@be testing (e14af28)
  • BaseGrammar: Inline null services (4ccad99)
  • QueryBuilder: Fix tests on ACF 2016 due to @default metadata. (29b31d0)
  • formatting: Use cfformat for automatic formatting (119e434)
  • build: Skip cleanup of working directory before uploading APIDocs (1c2d0d3)
  • build: Commit apidocs to Ortus artifacts (636af8b)
  • tests: Add code coverage with FusionReactor (6e6600f)
  • README: Remove unused all-contributors information (e84addd)
  • APIDocs: Don't nest API docs (dc6bde8)
  • cleanup: Remove node (unused test runner) (ee51a59)
  • README: Remove emoji until ForgeBox can handle it again (70f2d45)
  • Changelog: Fix Changelog to rerun build (2b6aaa3)
  • ci: Fix flakey gpg keys (51d8c27)
  • ci: Test on adobe@2018 (d928b4b)
  • README: Update references to elpete to coldbox-modules (bc7c99c)
  • build: Enable commandbox-semantic-release (0fe689f)
  • box.json: Update references to coldbox-modules repo (7eb1a31)
  • build: Update Travis CI release process (e743833)

docs

  • QueryBuilder: Add missing docblocks (e6327d1)
  • box.json: Remove extra period in description (87347c7)

errors

  • schema: Better error message when passing in a TableIndex to create column (f91a3f7)

feat

  • QueryUtils: Turn on autoDeriveNumericType by default (295798b)
  • QueryBuilder: Add a way to return all rows when a certain maxRows is passed to paginate (79c4114)
  • QueryBuilder: Add a shortcut sumRaw method (ee86423)
  • SchemaBuilder: Add dropIndex method (efd1ca7)
  • SQLCommenter: Add SQLCommenter support for ColdBox (396814a)
  • SQLite: Add SQLite Grammar (5e48709)
  • QueryBuilder: Add columnList helper function (cd03ee5)
  • QueryBuilder: Add helper for CONCAT function (febe28a)
  • QueryBuilder: Add firstOrFail (f6d92cb)
  • QueryUtils: Auto derive the correct numeric sql types (#231) (c638925)
  • ModuleConfig: Allow defaultOptions to be set in moduleSettings (a98fb6c)
  • Locks: Add skip locked feature to lockForUpdate (eea76c6)
  • QueryBuilder: Make columns optional for insertUsing (3ff0f1f)
  • QueryBuilder: Add insertIgnore (6238626)
  • SqlServerGrammar: Allow deleting unmatched source records in upsert (cc9c106)
  • QueryBuilder: Allow using a source callback or QueryBuilder in upserts (ac2d959)
  • QueryBuilder: Add insertUsing to use queries to insert into tables (47a2c64)
  • QueryBuilder: Allow updates with subselects (af82f71)
  • QueryBuilder: Allow JOINS in UPDATE statements (0a89175)
  • QueryBuilder: Allow expressions in value and values (60d131e)
  • QueryBuilder: Add an upsert method (13debdd)
  • SchemaBuilder: Add default options to constructor (355c28a)
  • QueryBuilder: Add support for whereNotLike (b7deb9a)
  • QueryUtils: Automatically add scale to bindings when needed (0a92cea)
  • SchemaBuilder: Add computed / virtual column support (1531fed)
  • QueryBuilder: Add a reset method (f39089b)
  • Locks: Add locking helpers to qb (b986211)
  • CI: Adjust fetch depth for tests and release actions (c901892)
  • QueryBuilder: Add a new simplePaginate method (2c533e6)
  • QueryUtils: Introduce a setting to specify the default numeric sql type (8f102c9)
  • QueryBuilder: Add a dump command to aid in debugging a query while chaining (6fe518c)
  • QueryUtils: Introduce optional strict date detection (827f2e8)
  • QueryBuilder: Add reselect methods (81d987d)
  • QueryBuilder: Add a reorder method (69d6c5d)
  • QueryBuilder: Expose nested where functions (71ca350)
  • SchemaBuilder: Add support for MONEY and SMALLMONEY data types (24aadec)
  • BaseGrammar: Add executionTime to the data output, including interceptors (25d66d7)
  • Select: selectRaw now can take an array of expressions (d5b00af)
  • Orders: Add a clearOrders method (507dfdb)
  • Joins: Optionally prevent duplicate joins from being added (40212ff)
  • QueryBuilder: Enhance order by's with more direction options (c767ac8)
  • SqlServerGrammar: Add a parameterLimit public property (155cd3c)
  • QueryBuilder: Add a parentQuery option (f84de76)
  • QueryBuilder: Fully-qualified columns can be used in value and values (e4c16b8)
  • QueryBuilder: Add orderByRaw method (67a9222)
  • SchemaBuilder: Add methods to manage views (1ef8f82)
  • QueryUtils: Preserve column case and order in conversion (00cd691)
  • QueryBuilder: Generate SQL strings with bindings (2c84afb)
  • QueryBuilder: Distinct can now be toggled off (7255fa3)
  • SchemaBuilder: Add more column types (c9c4678)
  • MSSQLGrammar: Remove default constraint when dropping columns (88bfe81)
  • SchemaBuilder: Add renameTable alias for rename (e2c796e)
  • OracleGrammar: Add dropAllObjects and migrate fresh support (7fe3429)
  • MSSQLGrammar: Add support for dropAllObjects and migrate fresh (719e264)
  • QueryBuilder: Add database chunking (2a20ba4)
  • QueryBuilder: Use addUpdate to progressively add columns to update (65ad791)
  • QueryBuilder: Add whereLike method (ec12a2a)
  • QueryBuilder: Allow default options to be configured (34db905)
  • QueryBuilder: Allow raw values in inserts (bae3435)
  • QueryBuilder: Add a performant clone method (f1b367a)
  • QueryBuilder: Allow raw values in updates (5f287b9)
  • Subselect: Allow passing query objects to subselect (d2fb971)
  • QueryBuilder: Use array returntype where available (2c45627)
  • QueryBuilder: Add a columnFormatter option (984da75)
  • QueryBuilder: Add returning functionality for compatible grammars (7b12b02)
  • SchemaBuilder: Add unicode text functions (1a5207e)
  • Logging: Add debug logging for query sql and bindings. (2928feb)
  • QueryBuilder: Add support for Common Table Expressions (3e10da6)
  • QueryBuilder: Derived and Sub Tables (b3f0461)
  • QueryBuilder: Unions (59028a8)
  • SchemaBuilder: Allow an optional schema to hasTable and hasColumn (9bfcd45)
  • QueryBuilder: Add andWhere method for more readable chains. (309f4d8)
  • AutoDiscover: Allow for runtime discovery (700948a)
  • ModuleConfig: Auto discover grammar by default. (b2347ae)
  • Grammar: Added official support for MSSQL, Oracle, and Postgres. (#34) (733dae3)
  • SchemaBuilder: Add dropAllObjects action. (#31) (c3e23b5)

fix

  • ModuleConfig: Fix syntax errors (516ed4d)
  • QueryBuilder: Allow an optional datasource to be passed to columnList (808c992)
  • SQLCommenter: Make parseCommentString a public method (6b80419)
  • ModuleConfig: Make overriding the sqlCommenter settings easier (3b707fa)
  • QueryBuilder: Allow insertUsing to use CTE's (cdefad2)
  • BaseGrammar: Don't add DISTINCT to aggregate queries when the column is * (4528759)
  • PostgresGrammar: Fix upsert UPDATE SET bug (1e7b272)
  • QueryBuilder: Make aggregates work with union queries (98fcc76)
  • SqlServerGrammar: HOLDLOCK and READPAST are mutually exclusive (557b805)
  • BaseGrammar: Detect column aliases in raw statements (727f777)
  • OracleGrammar: Don't uppercase quoted aliases in Oracle (5b54d1d)
  • QueryBuilder: Fix for aliases in update statements (f72ea0c)
  • QueryBuilder: Don't sort columns for insertUsing (3f9b15f)
  • QueryBuilder: Add subquery bindings in insert and upsert statements (7ea072f)
  • QueryBuilder: Maintain column order when using source in upsert (c44e626)
  • OracleGrammar: Fix for Oracle returning custom column types (c07ff33)
  • QueryBuilder: Explicit arguments scoping (b5c1070)
  • QueryBuilder: Fix wheres with joins in update statements (fb98478)
  • Null: Fixes for full null support (963d79e)
  • QueryBuilder: Merge statements in SQL Server need a terminating semicolon (32b5dec)
  • QueryUtils: Add better null handling to inferSqlType (1f11650)
  • QueryBuilder: Correctly format columns being updated (a32bfb5)
  • Expressions: Better Expression support in HAVING (7b1096f)
  • Aggregates: Use default values via COALESCE (ab181e2)
  • Aggregates: Provide default values for sum and count if no records are returned (4ce89ac)
  • Aggregates: Allow any value to be returned from withAggregate (5323e39)
  • Pagination: Handle group by and havings in pagination queries (4a4428f)
  • QueryBuilder: Correctly wrap CTE expressions (f55a224)
  • OracleGrammar: Fix typo for argumentCollection (dce8e15)
  • OracleGrammar: Only use batch insert syntax when needed (9707f03)
  • QueryBuilder: Distinct and Aggregate queries compile correctly (0479eec)
  • QueryBuilder: Pass options to exists call in updateOrInsert (f07d97e)
  • Aggregates: Correctly return aggregate values (50f315a)
  • QueryBuilder: Account for raw expressions when generating mementos for comparison (1dc0096)
  • QueryBuilder: Fix limit on simplePaginate (cd1840c)
  • tests: Better scope test method names for ACF 2020 compatibility (c2d7a0d)
  • QueryBuilder: Use html as the default dump format (043ddb5)
  • QueryUtils: Use strictDateDetection setting in constructor (76ae59f)
  • QueryBuilder: Allow for bindings in orderByRaw (5a97a7f)
  • QueryBuilder: Ignore select bindings for aggregate queries (8a3a181)
  • BaseGrammer: Allow spaces in table aliases. (b06d690)
  • SqlServerGrammar: Split FLOAT and DECIMAL column types (82da682)
  • QueryBuilder: Clear order by bindings when calling clearOrders (f1e941a)
  • QueryBuilder: Add bindings from orderBySub expressions (77213a6)
  • OracleGrammar: Correcly wrap all subqueries and aliases (3e9210f)
  • MySQLGrammar: Allow nullable timestamps in MySQL (ceb96a1)
  • QueryBuilder: Return 0 on null aggregates (ee10a67)
  • QueryBuilder: Match type hints to documentation for join functions (a23a1b6)
  • QueryUtils: Handle numeric checks with Secure Profile enabled (a849525)
  • QueryBuilder: Allow raw statements in basic where clauses (18200ec)
  • QueryBuilder: Added options structure to count() method call in paginate (99201fb)
  • QueryBuilder: Allow for space-delimited sort directions (5530679)
  • QueryBuilder: Add helpful message when trying to use a closure with 'from' (a8e7bb4)
  • QueryBuilder: 'value' and 'values' now work with column formatters (da60695)
  • QueryBuilder: Correctly format RETURNING clauses (977edcf)
  • QueryUtils: Handle multi-word columns in queryRemoveColumns (69d3058)
  • QueryBuilder: Fix incorrect structAppend overwrites (ad770d2)
  • OracleGrammar: Remove elvis operator due to ACF compatibility issues (e4b27b8)
  • PostgresGrammar: Update enum tests for Postgres (c50b00b)
  • PostgresGrammar: Fix wrapping of enum types (2d65e08)
  • QueryBuilder: Compat fix for ACF 2018 and listLast parsing (d30c8cd)
  • SchemaBuilder: Include current_timestamp default for timestamps (9f9a6c9)
  • QueryBuilder: Ignore table qualifiers for insert and update (466d791)
  • JoinClause: Prevent duplicate joins when using closure syntax (8f5028a)
  • BaseGrammar: Fix a case where a column was not wrapped correctly (e4fcff4)
  • QueryBuilder: Avoid duplicate due to Hibernate bugs (ec429ba)
  • QueryBuilder: Upgrade cbpaginator to fix maxrows discrepency (085c8a6)
  • BaseGrammar: Fix using column formatters with updates and inserts (e4fb585)
  • QueryBuilder: Fix using with query param structs (07c9b72)
  • QueryBuilder: Ignore orders in aggregate queries (39e1338)
  • BaseGrammar: Improve column wrapping with trimming (d98a5cb)
  • QueryBuilder: Prefer the parent query over magic methods (f9fd8d1)
  • Pagination: Allow passing query options in to paginate (cdecfb3)
  • QueryBuilder: Fix for inserting null values directly (1de27a6)
  • formatting: Futher fixes with cfformat (b4d74b3)
  • QueryBuilder: Add a type to the onMissingMethod exception (90d1093)
  • MySQLGrammar: Use single quote for column comment (7304202)
  • QueryBuilder: Accept lambdas where closures are allowed. (f88809b)
  • QueryBuilder: Better whitespace splitting for select lists (6f771e3)
  • QueryUtils: Fix array normalization to handle non-string inputs (01613c4)
  • QueryBuilder: Trim select columns string before applying (d6cbf36)
  • QueryBuilder: Fix cbpaginator instantiation path (9a8f03a)
  • QueryBuilder: Fix typo in docblock (97c8785)
  • QueryBuilder: Fix docblock name (79b96c6)
  • QueryBuilder: Pass paginationCollector and defaultOptions to newQuery (bccbc40)
  • QueryBuilder: Explicitly set andWhere methods to use the 'and' combinator (adce834)
  • QueryBuilder: Allow any custom function for where (fb01927)
  • SchemaBuilder: Allow raw in alter statements (2202828)
  • QueryBuilder: Allow closures to be used with leftJoin and rightJoin (e7ddf2f)
  • Utils: Preserve column casing when removing columns (433df5d)
  • namespaces: Fix for ACF 11 namespaces (784855c)
  • OracleGrammar: Fix for removing generated columns from insert and updates (f4ab485)
  • QueryBuilder: Make operator and combinator checks case-insensitive (a90b944)
  • PostgresGrammar: Only drop tables in the current schema (0866f9a)
  • PostgresGrammar: Use correct detection of tables in schemas (10408a1)
  • QueryBuilder: Revery using array returntype where available (d4fea1d)
  • QueryBuilder: Correctly keep where bindings for updateOrInsert (fa9fab6)
  • BaseGrammar: Fix for when the query object is null (efb3917)
  • SchemaBuilder: Default values respect column types (ae2fc4b)
  • SchemaBuilder: Wrap enum values in single quotes (89b58c4)
  • QueryBuilder: Add missing andWhere methods (7273ce4)
  • SchemaBuilder: Fix incorrect column name for hasTable and hasColumn (292bc2a)
  • SchemaBuilder: Update UUID length to 36 characters (2569f82)
  • MSSQLGrammar: Replace NTEXT with NVARCHAR(MAX) (936b01d)
  • QueryBuilder: Fix JoinClause return value (5d113c7)
  • Column: Explicitly name default constraint for MSSQL (288bd66)
  • PostgresGrammar: Fix typo in getAllTableNames (91caf6a)
  • SchemaBuilder: Fix dropping foreign keys in MySQL (8895447)
  • ModuleConfig: Fix logic for determining CommandBox vs ColdBox environment (5c66466)
  • ModuleConfig: Add PostgresGrammar alias to WireBox (eca03f0)
  • QueryBuilder: Preserve returnFormat when creating a new builder (4538947)
  • MySQLGrammar: Default to CURRENT_TIMESTAMP for timestamp columns (#32) (680750a)

other

  • *: v9.0.0-beta.3 (420f8b1)
  • *: v9.0.0-beta.2 (dded0a1)
  • *: v9.0.0-beta.1 (bbf1d67)
  • *: Apply cfformat changes (e59f0ad)
  • *: Apply cfformat changes (aefbf88)
  • *: chore: trigger build (4a8bbdb)
  • *: v8.7.0-beta.2 (62705cd)
  • *: v8.7.0-beta.1 (13feb20)
  • *: Add support for mediumtext & longtext types (#144) (001344d)
  • *: fix: Format with cfformat (dc2a9b6)
  • *: fix: Update gitignore to account for folder paths (382c16b)
  • *: chore: Adjust ignore files (e5702ed)
  • *: chore: Use forgeboxStorage (191c732)
  • *: fix(QueryUtils): Account for null values when checking for numeric values (42f2eb4)
  • *: refactor: Remove unneeded clearExcept argument (0b90157)
  • *: added last() (5b0fe28)
  • *: Update references from Builder to QueryBuilder (632e697)
  • *: Updated API Docs (8325db5)
  • *: 5.0.2 (c8cab5d)
  • *: 5.0.1 (75def91)
  • *: 5.0.0 (d944eb7)
  • *: Add @tonyjunkes as a contributor (1adbbba)
  • *: Updated API Docs (e0ebc41)
  • *: 5.0.0 (dbcaf8a)
  • *: Updated API Docs (dbc7eb5)
  • *: 4.1.0 (b014875)
  • *: renameConstraint can take TableIndex instances as well as strings to rename a constraint (4e9476d)
  • *: Greatly simplify drop column (3fd4c39)
  • *: Add rename index (296cc43)
  • *: Rename removeConstraint to dropConstraint (4cfbaff)
  • *: Allowing adding multiple constraints in the same alter call (1d60df4)
  • *: Organize code (543eaa9)
  • *: Add doc blocks for table constraint methods (10fe437)
  • *: Alphabetize the table constraint methods (06e5d1c)
  • *: Add docblocks to TableIndex (60c7538)
  • *: Change default onUpdate and onDelete actions to NO ACTION. (3a8d7a5)
  • *: Add docblocks to Column (ad71086)
  • *: Remove hasPrecision file and do it manually for a cleaner Column class. (e5fc961)
  • *: Streamline uuid type to be just CHAR(35) (683cd36)
  • *: Refactor all the integers to have the same signature (28d5b81)
  • *: Add docblocks to SchemaBuilder (64cecd5)
  • *: Rename build to execute (cc09aaa)
  • *: Add missing semicolon (d1d0066)
  • *: CommandBox / ColdBox cross-compatibility updates (7d06660)
  • *: Fix typo in the sql method call (c2295d6)
  • *: Finish up foreign key dsl (4cf869a)
  • *: Fix foreign key dynamic names (7b0f9f0)
  • *: Add primary key dsl (25ba4e7)
  • *: Fix spacing in basic indexes and enum lists (4c2cf71)
  • *: Make index names more globally unique. (b7b6636)
  • *: Fix primary index names to include table names if no override provided (d63a4ae)
  • *: Add basic table index support (f247e15)
  • *: Remove constraints by name or index object (dffee36)
  • *: Add unique constraing for columns and tables. (61306e0)
  • *: Add hasTable and hasColumn support for MySQL and Oracle (2c4e5d0)
  • *: Add test for multiple table changes at once. (cf65e11)
  • *: Enable adding columns to an existing table (a54eb86)
  • *: Add modifyColumn syntax (1d64624)
  • *: Add raw method for SQL escape hatch (d77a729)
  • *: Rename columns (0bb926e)
  • *: Add rename tables functionality (daa13fa)
  • *: Add drop multiple columns (f7a7fce)
  • *: Organize code a bit (d6170a3)
  • *: Drop a column from an existing table (f8940bc)
  • *: Add dropIfExists support (8b175c7)
  • *: Add drop table command (b77781a)
  • *: Refactor order of arguments in create (3ee5dca)
  • *: Rename Grammar to BaseGrammar (1bd2dcb)
  • *: Add indexes for morphs and nullableMorphs (5de9ee3)
  • *: Convert schema builder to allow for multiple sql statements. (c9c6405)
  • *: Add work in progress nullable implementation. (735a03a)
  • *: Add column modifiers — comment, default, nullable, unsigned (25fbade)
  • *: Add uuid type (f35e1f1)
  • *: Add big, medium, small, and tiny integer and increments variants. (2bb379d)
  • *: Add medium and long text types (35b7d83)
  • *: Add json type (alias to TEXT) (6403d3f)
  • *: Add float type (86cc974)
  • *: Add enum type. (e2f17ab)
  • *: Add decimal type (aa13c72)
  • *: Add bit type (48d0044)
  • *: Have boolean be it's own type so different grammars can interpolate it differently. (c909f9f)
  • *: Add date, datetime, time, and timestamp types. (857bdcf)
  • *: Add char and string types (5732161)
  • *: Add integer, unsignedInteger, increments, and text types (fb76853)
  • *: Add more column types for schema builder (3f80002)
  • *: Initial Schema Buidler implementation (8a299f6)
  • *: Rename Grammar to BaseGrammar to fit the rest of the documentation. (365e32a)
  • *: Update README.md (872355e)
  • *: Add codesponsor.io banner (a54966a)
  • *: Updated API Docs (a992557)
  • *: 4.0.1 (b479473)
  • *: Update with new docs link (f1c04c6)
  • *: Fixed a bug where calling toSQL would modify the builder object. (c00ecef)
  • *: Fix for insert bindings including other binding types as well (c84ec6c)
  • *: Add @BluewaterSolutions as a contributor (92dd7ad)
  • *: Fix exists method to work across engines (17afdfa)
  • *: Normalize line endings and trim whitespace at the end of lines (bf4ecc7)
  • *: Allow lists to be passed in to whereIn (d0cc901)
  • *: Updated API Docs (bf83436)
  • *: 4.0.0 (ca7049f)
  • *: Fix bug when checking for a "*" column and it was actually an Expression. (2edaf30)
  • *: Add subSelect method (79343a0)
  • *: Add returnObject parameter to assist in returning the generated keys from insert statements (dc5242f)
  • *: Add preQBExecute and postQBExecute interception points. (0c964e5)
  • *: BREAKING CHANGE: Have first return a struct instead of an array. (4b46fce)
  • *: Add profiling test tooling (25286fd)
  • *: Updated API Docs (aa9db53)
  • *: 3.0.0 (993b0c3)
  • *: Remove list detection since it isn't used in the builder and is causing issues (73f16d2)
  • *: add MIT License (6409438)
  • *: Stylistic fix on the badges (a04e631)
  • *: Add @timmaybrown as a contributor (584f785)
  • *: Add @murphydan as a contributor (2bf3566)
  • *: Add @aliaspooryorik as a contributor (caf9065)
  • *: Add @elpete as a contributor (bb7b8bb)
  • *: Merge branch 'development' (e3a27f6)
  • *: Updated API Docs (b9e04f5)
  • *: 2.1.0 (8dbddd9)
  • *: A couple minor stylistic changes. (80f14e2)
  • *: Update Builder.cfc (b77a87b)
  • *: issue #8 - additional tests for rawExpressions in the array, removed lists as a valid value for array value and refactored validDirections array to be an instance variable aptly named to match the other naming conventions. (8704ff4)
  • *: First stab at implementing the various requirements for issue #8 to accept an array or list as the column argument's value. The array can accept a variety of value formats that can be intermingled if desired. All scenarios will inherit eithe the default direction or the supplied value for the direction argument. (e0b9b63)
  • *: Cache CommandBox for Travis builds (5eb4561)
  • *: Add new API Docs (2c1f19b)
  • *: 2.0.4 (3414ea7)
  • *: Return result from Oracle grammar when record count is 0 (b8a13cd)
  • *: Updated API Docs (c50d061)
  • *: 2.0.3 (8634e5c)
  • *: Updated API Docs (a6df8a3)
  • *: 2.0.2 (f0886b6)
  • *: Add new API Docs package scripts (c8555ec)
  • *: Updated API Docs (95c2d93)
  • *: Nest the apidocs in a different docs site for future better looking docs (9a8e1fa)
  • *: 2.0.1 (6bd958d)
  • *: Add more files to the box ignore (e233853)
  • *: Add docs to the ignore for box install (29017aa)
  • *: Move to the docs folder since that is what GitHub pages looks for. (7c94266)
  • *: 2.0.0 (e1710bf)
  • *: Add API Docs (fa2edae)
  • *: Finish API docs for QB!!!!! (f145d9a)
  • *: 1.6.2 (c6508bb)
  • *: Add a check to only try to remove the QB_RN column when records actually exist in the query. (4d10905)
  • *: A fun refactor using closures of aggregates. Added docblocks to the new with methods. (9b946c4)
  • *: Add docblocks for bindings (ef1970d)
  • *: Add docblocks for insert, update, and delete (bbd7c6a)
  • *: Add new tap method for inspecting a query in process without interrupting chaining. (f9b7432)
  • *: Use util check instead of raw isInstanceOf (6388bfd)
  • *: Better name forPage arguments (0037cdd)
  • *: Add docblocks for where clauses and groups/havings/orders/limits (c396c98)
  • *: Add docblocks for joins (f580f0a)
  • *: Add more to the API docs (0d5dd74)
  • *: Fix WireBox mapping for newly required returnFormat (61d8a14)
  • *: Add missing semicolons (0493b4a)
  • *: Deprecate returningArrays in favor of returnFormat (f52e25a)
  • *: Add selectRaw helper method. Alias table for `from. (20da7ea)
  • *: Set up bdd with ColdBox Elixir (dc5cf18)
  • *: Add testbox runner and npm package script for tests (7a3ae71)
  • *: 1.6.1 (068d8a0)
  • *: Minor formatting changes (73f0856)
  • *: get tests to pass on ACF11 (aadb1f8)
  • *: Use queryExecute instead of Query() for query of query (e2c8cb2)
  • *: 1.6.0 (6db8522)
  • *: Parse column and table aliases without AS in them (9d04a89)
  • *: 1.5.0 (6937d35)
  • *: Add first MSSQL-specific grammar (89b9c84)
  • *: 1.4.0 (b11ea7f)
  • *: Fix failing test setup from adding return format (301d013)
  • *: Provide custom oracle mass insert compilation (d567830)
  • *: Fix return results failing on insert, update, and deletes (61ca2b1)
  • *: Allow passing options in to insert, update, and delete queries (c45fdcd)
  • *: 1.3.0 (8258998)
  • *: Allow a closure to influence return results. (7a633bb)
  • *: 1.2.4 (9ddea67)
  • *: Fix bug with oracle limits, offsets, and Query of Queries (58189fc)
  • *: 1.2.3 (b54ff1b)
  • *: Fix limit and offset for Oracle and remove generated QB_RN column (44849ff)
  • *: 1.2.2 (d36c7ba)
  • *: Update README formatting (a0a3177)
  • *: Use toBeWithCase for SQL statement checks. Add a test about uppercasing Oracle wrapped values. (e14da32)
  • *: Apply the table prefix to the table alias as well. (e5c6c4b)
  • *: 1.2.1 (44752d1)
  • *: Quick fixes for Oracle grammar. Still needs tests (74e14f7)
  • *: Merge branch 'development' (e4146cb)
  • *: 1.2.0 (a077807)
  • *: Add OracleGrammar WireBox mapping in ModuleConfig (a4499a9)
  • *: Add section on specifying defaultGrammar (cdc0776)
  • *: Update readme with correct Travis badges (d9fce51)
  • *: Add Oracle grammar support with limit and offset (9bea030)
  • *: Move MySQL Grammar tests to their own file (d4a6856)
  • *: 1.2.0 (a33d937)
  • *: Add OracleGrammar WireBox mapping in ModuleConfig (5c202f0)
  • *: Add section on specifying defaultGrammar (c6dcbd5)
  • *: Update readme with correct Travis badges (84a937d)
  • *: Add Oracle grammar support with limit and offset (c9bab7b)
  • *: Move MySQL Grammar tests to their own file (746d190)
  • *: 1.1.2 (511a567)
  • *: Fix two functions to return any to allow for query or array return results (b70b968)
  • *: 1.1.1 (00ac2b0)
  • *: Add MySQLGrammar binding (bbd2717)
  • *: 1.1.0 (fb82230)
  • *: Add initial MySQL Grammar support (77b636c)
  • *: Adding mappings for WireBox. (8771321)
  • *: Remove Oracle Grammar to be implemented at a later time. (8fcb297)
  • *: Add fix for negative values in forPage (10c77ce)
  • *: Add forPage helper to help with pagination. (658af5b)
  • *: Add missing semicolon for ACF (da77797)
  • *: Add havings clause (f1e3f67)
  • *: Use accessor instead of direct variables access. (6f54077)
  • *: Default to returning arrays of structs over queries. (1dd330b)
  • *: Refactor runQuery to run. (789a6c1)
  • *: Allow passing a single column or an array of columns to get to execute the query with those columns once. (338f82c)
  • *: Add value and exist helper query methods. (34f7ddc)
  • *: Implement count, max, min, and sum aggregate methods. (3217de2)
  • *: Default selecting “*” if nothing is passed in to select() (c542425)
  • *: Implement retrieval shortcuts — first, find, get (4440e23)
  • *: Verify raw statements work in select fields (9907bab)
  • *: Minor formatting adjustments (971489e)
  • *: Minor formatting changes (1f41186)
  • *: Remove unused interface (ee85fc7)
  • *: Remove inject helpers. We'll manage that in the ModuleConfig.cfc (71b5e5c)
  • *: Update references to qb and correct version (cb1ffdd)
  • *: Remove ACF 10 support because I want to use member functions. (0b634bd)
  • *: Add import statements for CF11. (ef23bf1)
  • *: Fixes for Adobe engines. (64c19c7)
  • *: Update Travis script (3249f98)
  • *: Add updateOrInsert helper (c30ad18)
  • *: Add exists (c678cf2)
  • *: Add limit and offset (e606102)
  • *: Update readme from Quick to qb (e585a88)
  • *: Rename Quick to qb. (29b34af)
  • *: Remove the need to return a query in a when callback. (657d47c)
  • *: Insert, Updates, and Deletes! Oh my! (e19dae3)
  • *: Remove unneeded dependency (0452b44)
  • *: Clean up tests and all tests passing! (6e75e61)
  • *: Implement group bys (73f961d)
  • *: Implement when callbacks (ed65e09)
  • *: Refactor to addBindings (7ca0d5e)
  • *: Implement joins (f41bca0)
  • *: Finish implementing where in. All wheres are done! (4d734b3)
  • *: Implement between statements (26f937b)
  • *: Implement null checks (9f86158)
  • *: Refactor to generated getters and setters. (04f80f7)
  • *: Implement where exists (d4174e3)
  • *: Implement table prefixes (edf8f66)
  • *: Finish basic wheres (160f68d)
  • *: Implement select methods (baa72a2)
  • *: Reformat according to new style guidelines (fadb882)
  • *: Add sublime project file (9e1cd9c)
  • *: Round out failing tests. Time to start implementing (bb54d35)
  • *: Add more failing query/grammar tests (0d874c5)
  • *: Add a bunch of failing tests for builder+grammar interaction (532ffdb)
  • *: Update to the latest Travis CI multi-engine file (52c647c)
  • *: Add comments about ACF10 making life sad. (bc482d1)
  • *: Clarify that PLATFORM is really an ENGINE (cc328fb)
  • *: Add Travis build badge to README. (0856b69)
  • *: Remove unneeded files now that the testing script is inline. (1ce41ba)
  • *: Move script in to travis.yml file. (18c1f2e)
  • *: Add a sleep call to make sure the server has time to spin up. (96c4cf5)
  • *: Specify required CFML versions. (cce8483)
  • *: Major refactoring to support ACF10 (3abeb67)
  • *: Specify that Lucee 5 is a snapshot version. (cfd0d23)
  • *: Switch to the latest version of CommandBox for multi-server options. (cefa79d)
  • *: Add test result properties file to gitignore (a19ea45)
  • *: Add a gitkeep file to the tests results path so tests can run on Travis. (5687ae0)
  • *: Try to add travis support for multiple cf engines. (2833375)
  • *: Add README (369e3c7)
  • *: Move the list and array inferSqlType tests to the right block. (917f132)
  • *: Infer the sql type of lists and arrays based on if all the members share the same sql type; otherwise, default to CF_SQL_VARCHAR. (7ae2548)
  • *: Added orWhere{Column} dynamic method matching. (b221bcd)
  • *: Add whereIn and whereNotIn helper methods. (118db23)
  • *: Return the Builder to continue chaining on dynamic where methods. (202127a)
  • *: Add list functionality to the QueryUtils extractBinding (80dc5b0)
  • *: Wrap the parameters in an "IN" or "NOT IN" clause. (c69cae3)
  • *: Simplify the operator list (4ae3cf1)
  • *: Upper case operators in SQL strings. (d7ba404)
  • *: Unify exception types for invalid operators and combinators (c4b9d68)
  • *: Don't open the browser automatically on server start. (Use gulp watch instead for BrowserSync.) :-) (623517f)
  • *: Refactor to Wirebox injection. (54bc5e0)
  • *: Infer the cfsqltype on bindings. (3f53bd5)
  • *: Refactor to new QueryUtils file for shared functionality. (426e72d)
  • *: Refactor bindings to use structs instead of values in preparation for cfsqltypes. (90fc19c)
  • *: Also allow the shortcut where syntax for the on method. (c67bd66)
  • *: Allow the shortcut where statement in joins. (28fc828)
  • *: Add join query bindings. (ad911fa)
  • *: Fix the SQL compilation order. (ccbc273)
  • *: Allow default settings with user overrides in the ModuleConfig. (f2d2441)
  • *: Fixes for new Quick module mapping. (1caa4bc)
  • *: Add box scripts to workflow (23409ce)
  • *: 0.1.1 (ad26504)
  • *: Fix for mappings to work correctly in modules. (7502394)
  • *: Allow the join closure to be passed in as the second positional argument. (9efbe5b)
  • *: Work on Join clauses (fb25c48)
  • *: Implement joins (c1f3228)
  • *: Enable distinct flag. Clean up duplication in tests. Move src/ to models/ (7a83500)
  • *: Set up BrowserSync with ColdBox Elixir (8109613)
  • *: Always upper case the combinator. (b4b8e2b)
  • *: Validate combinators (e3bd0fe)
  • *: Compile where statements (e403216)
  • *: Simple query execution (a2b1090)
  • *: Allow specifying the combinator (AND or OR) . (eb3d6e0)
  • *: Add where values to the SQL bindings array. (8dc4a47)
  • *: Use ColdBox Elixir (9925fe6)
  • *: Run tests through CommandBox (a2c350f)
  • *: Just dump everything we'd been working on. (9ff2c6c)
  • *: Initial commit (00d24a6)

perf

  • QueryBuilder: Use native returntype where possible (ACF 2021+) (3e7529d)
  • QueryBuilder: arrayEach is slow compared to merging arrays (6f9a3e7)
  • QueryBuilder: Use count to determine exists instead of the full query (d51ecf4)
  • BaseGrammar: Remove the need for duplicate or structCopy calls (89ea9fc)
  • SchemaBuilder: Replace duplicate() with structCopy() (d0237c8)
  • SchemaBuilder: Removed case of isInstanceOf because it is slow (2d65d03)
  • QueryBuilder: Remove isInstanceOf for performance benefits (33fe75c)
  • QueryBuilder: Replace normalizeToArray with simpler Array check (d54bcce)
  • BaseGrammar: Avoid isInstanceOf in wrapColumn (15042ce)

refactor

  • QueryBuilder: Split off a whereBasic method (36d87b3)
  • QueryBuilder: Handle all andWhere.* and orWhere.* methods dynamically (cc560af)
  • QueryBuilder: Remove unnecessary arguments from crossJoin methods (f920d1b)
  • InterceptorService: Use a null interceptor service in the constructor (5f3a3ec)

v8.9.1

16 Sep 2022 — 21:07: 41 UTC

fix

  • SqlServerGrammar: HOLDLOCK and READPAST are mutually exclusive (557b805)

v8.9.0

08 Aug 2022 — 17:31: 59 UTC

feat

  • ModuleConfig: Allow defaultOptions to be set in moduleSettings (a98fb6c)

v8.8.1

05 Aug 2022 — 17:21: 33 UTC

fix

  • BaseGrammar: Detect column aliases in raw statements (727f777)

v8.8.0

14 Jun 2022 — 17:38: 07 UTC

feat

  • Locks: Add skip locked feature to lockForUpdate (eea76c6)
  • QueryBuilder: Make columns optional for insertUsing (3ff0f1f)
  • QueryBuilder: Add insertIgnore (6238626)
  • SqlServerGrammar: Allow deleting unmatched source records in upsert (cc9c106)
  • QueryBuilder: Allow using a source callback or QueryBuilder in upserts (ac2d959)
  • QueryBuilder: Add insertUsing to use queries to insert into tables (47a2c64)

fix

  • OracleGrammar: Don't uppercase quoted aliases in Oracle (5b54d1d)
  • QueryBuilder: Fix for aliases in update statements (f72ea0c)
  • QueryBuilder: Don't sort columns for insertUsing (3f9b15f)
  • QueryBuilder: Add subquery bindings in insert and upsert statements (7ea072f)
  • QueryBuilder: Maintain column order when using source in upsert (c44e626)

v8.7.8

14 Jun 2022 — 17:08: 06 UTC

fix

  • OracleGrammar: Fix for Oracle returning custom column types (c07ff33)

other

  • *: chore: trigger build (4a8bbdb)

v8.7.7

24 Jan 2022 — 20:08: 20 UTC

fix

  • QueryBuilder: Explicit arguments scoping (b5c1070)

v8.7.6

22 Jan 2022 — 20:49: 41 UTC

perf

  • QueryBuilder: arrayEach is slow compared to merging arrays (6f9a3e7)

v8.7.5

22 Dec 2021 — 17:19: 08 UTC

fix

  • QueryBuilder: Fix wheres with joins in update statements (fb98478)

v8.7.4

12 Oct 2021 — 22:26: 26 UTC

fix

  • Null: Fixes for full null support (963d79e)

v8.7.3

06 Oct 2021 — 22:05: 52 UTC

fix

  • QueryBuilder: Merge statements in SQL Server need a terminating semicolon (32b5dec)

v8.7.2

29 Sep 2021 — 22:05: 52 UTC

fix

  • QueryUtils: Add better null handling to inferSqlType (1f11650)

v8.7.1

22 Sep 2021 — 02:17: 56 UTC

fix

  • QueryBuilder: Correctly format columns being updated (a32bfb5)

v8.7.0

21 Sep 2021 — 21:11: 00 UTC

chore

  • Release: Fix artifact commit process during release (2c7d3eb)
  • CI: Remove ColdBox as a test dependency (9fa95ca)
  • CI: Test with full null support (98b0df9)

feat

  • QueryBuilder: Allow updates with subselects (af82f71)
  • QueryBuilder: Allow JOINS in UPDATE statements (0a89175)
  • QueryBuilder: Allow expressions in value and values (60d131e)
  • QueryBuilder: Add an upsert method (13debdd)

fix

  • Expressions: Better Expression support in HAVING (7b1096f)
  • Aggregates: Use default values via COALESCE (ab181e2)
  • Aggregates: Provide default values for sum and count if no records are returned (4ce89ac)
  • Aggregates: Allow any value to be returned from withAggregate (5323e39)
  • Pagination: Handle group by and havings in pagination queries (4a4428f)

other

v8.3.0

29 Oct 2020 — 22:52: 21 UTC

feat

  • QueryUtils: Introduce a setting to specify the default numeric sql type (8f102c9)

v8.2.2

01 Oct 2020 — 04:22: 26 UTC

fix

  • QueryBuilder: Use html as the default dump format (043ddb5)

v8.2.1

01 Oct 2020 — 04:04: 03 UTC

fix

  • QueryUtils: Use strictDateDetection setting in constructor (76ae59f)

v8.2.0

27 Sep 2020 — 03:08: 28 UTC

feat

  • QueryBuilder: Add a dump command to aid in debugging a query while chaining (6fe518c)

v8.1.0

24 Sep 2020 — 17:19: 43 UTC

feat

  • QueryUtils: Introduce optional strict date detection (827f2e8)

fix

  • QueryBuilder: Allow for bindings in orderByRaw (5a97a7f)

v8.0.3

17 Aug 2020 — 16:40: 49 UTC

fix

  • QueryBuilder: Ignore select bindings for aggregate queries (8a3a181)
  • BaseGrammer: Allow spaces in table aliases. (b06d690)
  • SqlServerGrammar: Split FLOAT and DECIMAL column types (82da682)

v8.0.2

13 Aug 2020 — 19:46: 21 UTC

fix

  • QueryBuilder: Clear order by bindings when calling clearOrders (f1e941a)

v8.0.1

28 Jul 2020 — 05:33: 09 UTC

fix

  • QueryBuilder: Add bindings from orderBySub expressions (77213a6)

v8.0.0

22 Jul 2020 — 16:39: 51 UTC

BREAKING

  • QueryBuilder: Automatic where scoping with OR clauses in when callbacks (0d6292d)

feat

  • QueryBuilder: Add reselect methods (81d987d)
  • QueryBuilder: Add a reorder method (69d6c5d)

v7.10.0

22 Jul 2020 — 04:57: 44 UTC

feat

  • QueryBuilder: Expose nested where functions (71ca350)

v7.9.9

21 Jul 2020 — 21:08: 35 UTC

fix

  • OracleGrammar: Correcly wrap all subqueries and aliases (3e9210f)

v7.9.8

17 Jul 2020 — 21:07: 34 UTC

fix

  • MySQLGrammar: Allow nullable timestamps in MySQL (ceb96a1)

v7.9.7

10 Jul 2020 — 05:50: 14 UTC

fix

  • QueryBuilder: Return 0 on null aggregates (ee10a67)

v7.9.6

08 Jul 2020 — 05:28: 16 UTC

fix

  • QueryBuilder: Match type hints to documentation for join functions (a23a1b6)

v7.9.5

07 Jul 2020 — 19:16: 32 UTC

fix

  • QueryUtils: Handle numeric checks with Secure Profile enabled (a849525)

v7.9.4

29 Jun 2020 — 19:19: 27 UTC

fix

  • QueryBuilder: Allow raw statements in basic where clauses (18200ec)

v7.9.3

27 Jun 2020 — 19:24: 33 UTC

fix

  • QueryBuilder: Added options structure to count() method call in paginate (99201fb)

v7.9.2

19 Jun 2020 — 03:52: 35 UTC

fix

  • QueryBuilder: Allow for space-delimited sort directions (5530679)
  • QueryBuilder: Add helpful message when trying to use a closure with 'from' (a8e7bb4)
  • QueryBuilder: 'value' and 'values' now work with column formatters (da60695)
  • QueryBuilder: Correctly format RETURNING clauses (977edcf)

v7.9.1

18 Jun 2020 — 22:37: 57 UTC

fix

  • QueryUtils: Handle multi-word columns in queryRemoveColumns (69d3058)
  • QueryBuilder: Fix incorrect structAppend overwrites (ad770d2)

v7.9.0

11 Jun 2020 — 22:59: 22 UTC

chore

  • Format: Format with cfformat (77af3ee)
  • format: Always use lf for new lines (707a288)
  • CI: Testing coldbox@be makes no sense as it's all unit tests (8b335da)
  • CI: Add coldbox@be testing (e14af28)
  • BaseGrammar: Inline null services (4ccad99)
  • QueryBuilder: Fix tests on ACF 2016 due to @default metadata. (29b31d0)

feat

  • SchemaBuilder: Add support for MONEY and SMALLMONEY data types (24aadec)
  • BaseGrammar: Add executionTime to the data output, including interceptors (25d66d7)
  • Select: selectRaw now can take an array of expressions (d5b00af)
  • Orders: Add a clearOrders method (507dfdb)
  • Joins: Optionally prevent duplicate joins from being added (40212ff)
  • QueryBuilder: Enhance order by's with more direction options (c767ac8)

fix

  • OracleGrammar: Remove elvis operator due to ACF compatibility issues (e4b27b8)
  • PostgresGrammar: Update enum tests for Postgres (c50b00b)
  • PostgresGrammar: Fix wrapping of enum types (2d65e08)
  • QueryBuilder: Compat fix for ACF 2018 and listLast parsing (d30c8cd)
  • SchemaBuilder: Include current_timestamp default for timestamps (9f9a6c9)
  • QueryBuilder: Ignore table qualifiers for insert and update (466d791)
  • JoinClause: Prevent duplicate joins when using closure syntax (8f5028a)
  • BaseGrammar: Fix a case where a column was not wrapped correctly (e4fcff4)
  • QueryBuilder: Avoid duplicate due to Hibernate bugs (ec429ba)
  • QueryBuilder: Upgrade cbpaginator to fix maxrows discrepency (085c8a6)
  • BaseGrammar: Fix using column formatters with updates and inserts (e4fb585)
  • QueryBuilder: Fix using with query param structs (07c9b72)
  • QueryBuilder: Ignore orders in aggregate queries (39e1338)
  • BaseGrammar: Improve column wrapping with trimming (d98a5cb)
  • QueryBuilder: Prefer the parent query over magic methods (f9fd8d1)

other

  • *: fix: Format with cfformat (dc2a9b6)
  • *: fix: Update gitignore to account for folder paths (382c16b)
  • *: chore: Adjust ignore files (e5702ed)

refactor

  • QueryBuilder: Split off a whereBasic method (36d87b3)

v7.8.0

17 May 2020 — 13:31: 14 UTC

feat

  • SchemaBuilder: Add support for MONEY and SMALLMONEY data types (24aadec)

v7.7.3

17 May 2020 — 07:33: 29 UTC

fix

  • PostgresGrammar: Update enum tests for Postgres (c50b00b)
  • PostgresGrammar: Fix wrapping of enum types (2d65e08)

v7.7.2

08 May 2020 — 21:26: 38 UTC

fix

  • QueryBuilder: Compat fix for ACF 2018 and listLast parsing (d30c8cd)
  • SchemaBuilder: Include current_timestamp default for timestamps (9f9a6c9)
  • QueryBuilder: Ignore table qualifiers for insert and update (466d791)

v7.7.1

04 May 2020 — 16:50: 13 UTC

fix

  • JoinClause: Prevent duplicate joins when using closure syntax (8f5028a)

v7.7.0

03 May 2020 — 16:43: 06 UTC

feat

  • BaseGrammar: Add executionTime to the data output, including interceptors (25d66d7)

v7.6.2

30 Apr 2020 — 21:19: 47 UTC

fix

  • BaseGrammar: Fix a case where a column was not wrapped correctly (e4fcff4)

v7.6.1

28 Apr 2020 — 21:46: 32 UTC

fix

  • QueryBuilder: Avoid duplicate due to Hibernate bugs (ec429ba)

v7.6.0

31 Mar 2020 — 02:50: 36 UTC

chore

  • format: Always use lf for new lines (707a288)

feat

  • Select: selectRaw now can take an array of expressions (d5b00af)
  • Orders: Add a clearOrders method (507dfdb)

refactor

  • QueryBuilder: Split off a whereBasic method (36d87b3)

v7.5.2

25 Mar 2020 — 15:10: 13 UTC

chore

  • CI: Testing coldbox@be makes no sense as it's all unit tests (8b335da)

fix

  • QueryBuilder: Upgrade cbpaginator to fix maxrows discrepency (085c8a6)

v7.5.1

25 Mar 2020 — 01:57: 21 UTC

chore

  • CI: Add coldbox@be testing (e14af28)

fix

  • BaseGrammar: Fix using column formatters with updates and inserts (e4fb585)

v7.5.0

12 Mar 2020 — 15:54: 22 UTC

feat

  • Joins: Optionally prevent duplicate joins from being added (40212ff)

v7.4.0

12 Mar 2020 — 15:33: 10 UTC

feat

  • QueryBuilder: Enhance order by's with more direction options (c767ac8)

v7.3.15

04 Mar 2020 — 15:00: 38 UTC

fix

  • QueryBuilder: Fix using with query param structs (07c9b72)

v7.3.14

28 Feb 2020 — 18:38: 25 UTC

fix

  • QueryBuilder: Ignore orders in aggregate queries (39e1338)

v7.3.13

28 Feb 2020 — 07:59: 08 UTC

other

  • *: fix: Format with cfformat (dc2a9b6)

v7.3.12

28 Feb 2020 — 05:37: 32 UTC

chore

  • BaseGrammar: Inline null services (4ccad99)
  • QueryBuilder: Fix tests on ACF 2016 due to @default metadata. (29b31d0)

fix

  • BaseGrammar: Improve column wrapping with trimming (d98a5cb)
  • QueryBuilder: Prefer the parent query over magic methods (f9fd8d1)

v7.3.11

13 Feb 2020 — 19:45: 42 UTC

other

  • *: fix: Update gitignore to account for folder paths (382c16b)

v7.3.10

13 Feb 2020 — 19:35: 23 UTC

other

  • *: chore: Adjust ignore files (e5702ed)

v7.3.9

13 Feb 2020 — 17:34: 56 UTC

other

  • *: chore: Use forgeboxStorage (191c732)

v7.3.8

07 Feb 2020 — 06:19: 42 UTC

fix

  • Pagination: Allow passing query options in to paginate (cdecfb3)

v7.3.7

30 Jan 2020 — 16:50: 04 UTC

fix

  • QueryBuilder: Fix for inserting null values directly (1de27a6)

v7.3.6

27 Jan 2020 — 22:04: 59 UTC

fix

  • formatting: Futher fixes with cfformat (b4d74b3)

v7.3.5

25 Jan 2020 — 08:09: 54 UTC

chore

  • formatting: Use cfformat for automatic formatting (119e434)

fix

  • QueryBuilder: Add a type to the onMissingMethod exception (90d1093)

v7.3.4

13 Jan 2020 — 18:21: 30 UTC

fix

  • MySQLGrammar: Use single quote for column comment (7304202)

v7.3.3

09 Jan 2020 — 20:28: 40 UTC

chore

  • build: Skip cleanup of working directory before uploading APIDocs (1c2d0d3)

v7.3.2

09 Jan 2020 — 20:16: 18 UTC

chore

  • build: Commit apidocs to Ortus artifacts (636af8b)

v7.3.1

07 Jan 2020 — 17:58: 00 UTC

other

  • *: fix(QueryUtils): Account for null values when checking for numeric values (42f2eb4)

v7.3.0

03 Jan 2020 — 06:06: 16 UTC

feat

  • SqlServerGrammar: Add a parameterLimit public property (155cd3c)

v7.2.0

02 Jan 2020 — 06:11: 35 UTC

feat

  • QueryBuilder: Add a parentQuery option (f84de76)

v7.1.0

31 Dec 2019 — 01:40: 01 UTC

feat

  • QueryBuilder: Fully-qualified columns can be used in value and values (e4c16b8)
  • QueryBuilder: Add orderByRaw method (67a9222)

fix

  • QueryBuilder: Accept lambdas where closures are allowed. (f88809b)

v7.0.0

20 Dec 2019 — 05:53: 14 UTC

BREAKING

  • QueryUtils: Improve numeric sqltype detection (74649bd)
  • QueryBuilder: Add pagination collectors to qb (4b2d85f)
  • MSSQLGrammar: Rename MSSQLGrammar to SqlServerGrammar (ea94494)
  • QueryBuilder: Rename callback to query for subSelect (87b27f5)
  • QueryBuilder: Expand closure and builder argument options (e002d94)
  • QueryBuilder: Add defaultValue and optional exception to value (ec23bb7)
  • ModuleConfig: Use full setting for WireBox mapping (1e14099)
  • QueryBuilder: Remove variadic parameter support (8690fcf)
  • *: refactor: Drop support for ACF 11 and Lucee 4.5 (9dbeaf3)

chore

  • tests: Add code coverage with FusionReactor (6e6600f)
  • README: Remove unused all-contributors information (e84addd)

feat

  • SchemaBuilder: Add methods to manage views (1ef8f82)
  • QueryUtils: Preserve column case and order in conversion (00cd691)
  • QueryBuilder: Generate SQL strings with bindings (2c84afb)
  • QueryBuilder: Distinct can now be toggled off (7255fa3)
  • SchemaBuilder: Add more column types (c9c4678)
  • MSSQLGrammar: Remove default constraint when dropping columns (88bfe81)
  • SchemaBuilder: Add renameTable alias for rename (e2c796e)
  • OracleGrammar: Add dropAllObjects and migrate fresh support (7fe3429)
  • MSSQLGrammar: Add support for dropAllObjects and migrate fresh (719e264)
  • QueryBuilder: Add database chunking (2a20ba4)
  • QueryBuilder: Use addUpdate to progressively add columns to update (65ad791)
  • QueryBuilder: Add whereLike method (ec12a2a)
  • QueryBuilder: Allow default options to be configured (34db905)
  • QueryBuilder: Allow raw values in inserts (bae3435)

fix

  • QueryBuilder: Better whitespace splitting for select lists (6f771e3)
  • QueryUtils: Fix array normalization to handle non-string inputs (01613c4)
  • QueryBuilder: Trim select columns string before applying (d6cbf36)
  • QueryBuilder: Fix cbpaginator instantiation path (9a8f03a)
  • QueryBuilder: Fix typo in docblock (97c8785)
  • QueryBuilder: Fix docblock name (79b96c6)
  • QueryBuilder: Pass paginationCollector and defaultOptions to newQuery (bccbc40)
  • QueryBuilder: Explicitly set andWhere methods to use the 'and' combinator (adce834)
  • QueryBuilder: Allow any custom function for where (fb01927)
  • SchemaBuilder: Allow raw in alter statements (2202828)
  • QueryBuilder: Allow closures to be used with leftJoin and rightJoin (e7ddf2f)

other

  • *: refactor: Remove unneeded clearExcept argument (0b90157)

perf

  • QueryBuilder: Use count to determine exists instead of the full query (d51ecf4)

refactor

  • QueryBuilder: Handle all andWhere.* and orWhere.* methods dynamically (cc560af)
  • QueryBuilder: Remove unnecessary arguments from crossJoin methods (f920d1b)

v6.5.0

05 Sep 2019 — 18:45: 38 UTC

feat

  • QueryBuilder: Add a performant clone method (f1b367a)

fix

  • Utils: Preserve column casing when removing columns (433df5d)

v6.4.1

04 Sep 2019 — 21:14: 02 UTC

build

  • travis: Use openjdk for builds (061e9d0)

fix

  • namespaces: Fix for ACF 11 namespaces (784855c)
  • OracleGrammar: Fix for removing generated columns from insert and updates (f4ab485)

v6.4.0

12 Jul 2019 — 03:46: 03 UTC

feat

  • QueryBuilder: Allow raw values in updates (5f287b9)

v6.3.4

12 Jun 2019 — 04:52: 37 UTC

fix

  • QueryBuilder: Make operator and combinator checks case-insensitive (a90b944)

other

v6.3.3

09 May 2019 — 19:51: 30 UTC

chore

  • APIDocs: Don't nest API docs (dc6bde8)

other

v6.3.2

06 May 2019 — 21:09: 24 UTC

fix

  • PostgresGrammar: Only drop tables in the current schema (0866f9a)

other

v6.3.1

06 May 2019 — 19:50: 34 UTC

fix

  • PostgresGrammar: Use correct detection of tables in schemas (10408a1)

other

v6.3.0

03 May 2019 — 15:59: 35 UTC

feat

  • Subselect: Allow passing query objects to subselect (d2fb971)

other

v6.2.1

30 Apr 2019 — 18:55: 17 UTC

fix

  • QueryBuilder: Revery using array returntype where available (d4fea1d)

other

v6.2.0

30 Apr 2019 — 01:25: 18 UTC

feat

  • QueryBuilder: Use array returntype where available (2c45627)

other

v6.1.0

10 Apr 2019 — 17:56: 24 UTC

feat

  • QueryBuilder: Add a columnFormatter option (984da75)

other

v6.0.4

20 Dec 2018 — 01:57: 03 UTC

fix

  • QueryBuilder: Correctly keep where bindings for updateOrInsert (fa9fab6)

other

v6.0.3

11 Dec 2018 — 22:33: 30 UTC

other

perf

  • BaseGrammar: Remove the need for duplicate or structCopy calls (89ea9fc)

v6.0.2

30 Nov 2018 — 13:41: 18 UTC

fix

  • BaseGrammar: Fix for when the query object is null (efb3917)

other

v6.0.1

29 Nov 2018 — 22:51: 44 UTC

other

perf

  • SchemaBuilder: Replace duplicate() with structCopy() (d0237c8)

v6.0.0

28 Nov 2018 — 05:10: 44 UTC

BREAKING

  • SchemaBuilder: Use uniqueidentifier for MSSQL uuid() (1b2d456)

feat

  • QueryBuilder: Add returning functionality for compatible grammars (7b12b02)

fix

  • SchemaBuilder: Default values respect column types (ae2fc4b)
  • SchemaBuilder: Wrap enum values in single quotes (89b58c4)
  • QueryBuilder: Add missing andWhere methods (7273ce4)

other

perf

  • SchemaBuilder: Removed case of isInstanceOf because it is slow (2d65d03)

v5.8.1

17 Sep 2018 — 21:14: 15 UTC

fix

  • SchemaBuilder: Fix incorrect column name for hasTable and hasColumn (292bc2a)

other

v5.8.0

17 Sep 2018 — 19:23: 06 UTC

feat

  • SchemaBuilder: Add unicode text functions (1a5207e)
  • Logging: Add debug logging for query sql and bindings. (2928feb)

fix

  • SchemaBuilder: Update UUID length to 36 characters (2569f82)
  • MSSQLGrammar: Replace NTEXT with NVARCHAR(MAX) (936b01d)

other

perf

  • QueryBuilder: Remove isInstanceOf for performance benefits (33fe75c)

refactor

  • InterceptorService: Use a null interceptor service in the constructor (5f3a3ec)

v5.7.0

18 Aug 2018 — 05:10: 01 UTC

chore

  • README: Remove emoji until ForgeBox can handle it again (70f2d45)
  • Changelog: Fix Changelog to rerun build (2b6aaa3)

feat

  • QueryBuilder: Add support for Common Table Expressions (3e10da6)
  • QueryBuilder: Derived and Sub Tables (b3f0461)
  • QueryBuilder: Unions (59028a8)

fix

  • QueryBuilder: Fix JoinClause return value (5d113c7)

other

v5.7.0

18 Aug 2018 — 04:28: 41 UTC

feat

  • QueryBuilder: Add support for Common Table Expressions

Add CTE support for the with CTE AS (...) syntax (3e10da6)

  • QueryBuilder: Derived and Sub Tables
  • Fixed JoinClause.newQuery() to expect QueryBuilder object as return value
  • Added support for derived tables
  • Added derived table support
  • Added fromRaw() method, which allows you to raw SQL "from" statements
  • Added fromSub() to support derived tables
  • Added joinRaw(), leftJoinRaw(), rightJoinRaw() and crossJoinRaw() for defining the raw SQL
  • Added the joinSub(), leftJoinSub(), rightJoinSub() and crossJoinSub() for joining to a derived table
  • Added mergeBindings() which is used for merging bindings from another QueryBuilder instance (b3f0461)
  • QueryBuilder: Unions
  • Fixed JoinClause.newQuery() to expect QueryBuilder object as return value
  • Added support for UNION/UNION ALL
  • Union statement is not created until after ORDER BY validation (59028a8)

fix

  • QueryBuilder: Fix JoinClause return value

Fixed JoinClause.newQuery() to expect QueryBuilder object as return value (#48) (5d113c7)

v5.8.0

17 Aug 2018 — 21:33: 47 UTC

chore

  • ci: Fix flakey gpg keys (51d8c27)
  • ci: Test on adobe@2018 (d928b4b)
  • README: Update references to elpete to coldbox-modules (bc7c99c)
  • build: Enable commandbox-semantic-release (0fe689f)
  • box.json: Update references to coldbox-modules repo (7eb1a31)
  • build: Update Travis CI release process (e743833)

docs

  • box.json: Remove extra period in description

Remove period as it is not needed for a single sentance (87347c7)

errors

  • schema: Better error message when passing in a TableIndex to create column (f91a3f7)

feat

  • QueryBuilder: Add support for Common Table Expressions

Add CTE support for the with CTE AS (...) syntax (3e10da6)

  • QueryBuilder: Derived and Sub Tables
  • Fixed JoinClause.newQuery() to expect QueryBuilder object as return value
  • Added support for derived tables
  • Added derived table support
  • Added fromRaw() method, which allows you to raw SQL "from" statements
  • Added fromSub() to support derived tables
  • Added joinRaw(), leftJoinRaw(), rightJoinRaw() and crossJoinRaw() for defining the raw SQL
  • Added the joinSub(), leftJoinSub(), rightJoinSub() and crossJoinSub() for joining to a derived table
  • Added mergeBindings() which is used for merging bindings from another QueryBuilder instance (b3f0461)
  • QueryBuilder: Unions
  • Fixed JoinClause.newQuery() to expect QueryBuilder object as return value
  • Added support for UNION/UNION ALL
  • Union statement is not created until after ORDER BY validation (59028a8)
  • SchemaBuilder: Allow an optional schema to hasTable and hasColumn

Since some users have access to multiple schemas on the same database, allow an optional schema parameter passed to hasTable and hasColumn (9bfcd45)

  • QueryBuilder: Add andWhere method for more readable chains.

andWhere behaves exactly like where. It is provided for a more readable method chain if desired. (309f4d8)

  • AutoDiscover: Allow for runtime discovery

Add AutoDiscover component to allow for database discovery at runtime as opposed to just at module registration. (700948a)

  • ModuleConfig: Auto discover grammar by default.

By default, we will auto discover the grammar for the user. This only happens once for ColdBox modules, so the database hit should be minimal. If the user specifies a grammar in their settings, we will use that and not even try to detect the grammar. (b2347ae)

  • Grammar: Added official support for MSSQL, Oracle, and Postgres. (#34)

Full QueryBuilder and SchemaBuilder support for all four database grammars (MSSQL, MySQL, Oracle, and Postgres). Revamped test suite to have consistent grammar test coverage. (733dae3)

  • SchemaBuilder: Add dropAllObjects action. (#31)

compileDropAllObjects needs to be implemented in every Grammar. By default, it throws an exception. Only a MySQLGrammar implementation currently exists. (c3e23b5)

fix

  • QueryBuilder: Fix JoinClause return value

Fixed JoinClause.newQuery() to expect QueryBuilder object as return value (#48) (5d113c7)

  • Column: Explicitly name default constraint for MSSQL
  • update MSSQL for DEFAULT constraint (288bd66)
  • PostgresGrammar: Fix typo in getAllTableNames (91caf6a)
  • SchemaBuilder: Fix dropping foreign keys in MySQL (8895447)
  • ModuleConfig: Fix logic for determining CommandBox vs ColdBox environment (5c66466)
  • ModuleConfig: Add PostgresGrammar alias to WireBox (eca03f0)
  • QueryBuilder: Preserve returnFormat when creating a new builder (4538947)
  • MySQLGrammar: Default to CURRENT_TIMESTAMP for timestamp columns (#32)

(680750a)

other

  • *: added last() (5b0fe28)
  • *: Update references from Builder to QueryBuilder (632e697)
  • *: Updated API Docs (8325db5)
  • *: 5.0.2 (c8cab5d)
  • *: 5.0.1 (75def91)
  • *: 5.0.0 (d944eb7)
  • *: Add @tonyjunkes as a contributor (1adbbba)
  • *: Updated API Docs (e0ebc41)
  • *: 5.0.0 (dbcaf8a)
  • *: Updated API Docs (dbc7eb5)
  • *: 4.1.0 (b014875)
  • *: renameConstraint can take TableIndex instances as well as strings to rename a constraint (4e9476d)
  • *: Greatly simplify drop column (3fd4c39)
  • *: Add rename index (296cc43)
  • *: Rename removeConstraint to dropConstraint (4cfbaff)
  • *: Allowing adding multiple constraints in the same alter call (1d60df4)
  • *: Organize code (543eaa9)
  • *: Add doc blocks for table constraint methods (10fe437)
  • *: Alphabetize the table constraint methods (06e5d1c)
  • *: Add docblocks to TableIndex (60c7538)
  • *: Change default onUpdate and onDelete actions to NO ACTION. (3a8d7a5)
  • *: Add docblocks to Column (ad71086)
  • *: Remove hasPrecision file and do it manually for a cleaner Column class. (e5fc961)
  • *: Streamline uuid type to be just CHAR(35) (683cd36)
  • *: Refactor all the integers to have the same signature (28d5b81)
  • *: Add docblocks to SchemaBuilder (64cecd5)
  • *: Rename build to execute (cc09aaa)
  • *: Add missing semicolon (d1d0066)
  • *: CommandBox / ColdBox cross-compatibility updates (7d06660)
  • *: Fix typo in the sql method call (c2295d6)
  • *: Finish up foreign key dsl (4cf869a)
  • *: Fix foreign key dynamic names (7b0f9f0)
  • *: Add primary key dsl (25ba4e7)
  • *: Fix spacing in basic indexes and enum lists (4c2cf71)
  • *: Make index names more globally unique. (b7b6636)
  • *: Fix primary index names to include table names if no override provided (d63a4ae)
  • *: Add basic table index support (f247e15)
  • *: Remove constraints by name or index object (dffee36)
  • *: Add unique constraing for columns and tables.

Includes refactor for TableIndex to always deal with multiple columns. (61306e0)

  • *: Add hasTable and hasColumn support for MySQL and Oracle (2c4e5d0)
  • *: Add test for multiple table changes at once. (cf65e11)
  • *: Enable adding columns to an existing table (a54eb86)
  • *: Add modifyColumn syntax (1d64624)
  • *: Add raw method for SQL escape hatch (d77a729)
  • *: Rename columns

MySQL has an unfortunate syntax that requires the definition to be repeated. We may be able to discover this from the table, but right now we're punting and asking the user to redeclare the column definition.

Fun fact, in MySQL, renameColumn will let you modifyColumn at the same time. (0bb926e)

  • *: Add rename tables functionality (daa13fa)
  • *: Add drop multiple columns

Also refactor SchemaCommands to a component that can take arbitrary parameters. (f7a7fce)

  • *: Organize code a bit (d6170a3)
  • *: Drop a column from an existing table

(f8940bc)

  • *: Add dropIfExists support

(8b175c7)

  • *: Add drop table command

(b77781a)

  • *: Refactor order of arguments in create

Since build should be overridden less often than options, make it last. (3ee5dca)

  • *: Rename Grammar to BaseGrammar

Fits better with our current documentation and ModuleConfig.cfc settings (1bd2dcb)

  • *: Add indexes for morphs and nullableMorphs (5de9ee3)
  • *: Convert schema builder to allow for multiple sql statements. (c9c6405)
  • *: Add work in progress nullable implementation.

Still needs index creation. (735a03a)

  • *: Add column modifiers — comment, default, nullable, unsigned (25fbade)

  • *: Add uuid type (f35e1f1)

  • *: Add big, medium, small, and tiny integer and increments variants. (2bb379d)

  • *: Add medium and long text types (35b7d83)

  • *: Add json type (alias to TEXT) (6403d3f)

  • *: Add float type (86cc974)

  • *: Add enum type. (e2f17ab)

  • *: Add decimal type (aa13c72)

  • *: Add bit type (48d0044)

  • *: Have boolean be it's own type so different grammars can interpolate it differently. (c909f9f)

  • *: Add date, datetime, time, and timestamp types. (857bdcf)

  • *: Add char and string types (5732161)

  • *: Add integer, unsignedInteger, increments, and text types (fb76853)

  • *: Add more column types for schema builder

  • bigIncrements

  • bigInteger

  • boolean

  • tinyInteger

  • unsignedBigInteger (3f80002)

  • *: Initial Schema Buidler implementation

Move Grammars from being nested inside Query to it's own top-level folder. Rename Builder to QueryBuilder. Create SchemaBuilder, Column, and TableIndex and three basic tests. (8a299f6)

  • *: Rename Grammar to BaseGrammar to fit the rest of the documentation. (365e32a)
  • *: Update README.md (872355e)
  • *: Add codesponsor.io banner (a54966a)
  • *: Updated API Docs (a992557)
  • *: 4.0.1 (b479473)
  • *: Update with new docs link (f1c04c6)
  • *: Fixed a bug where calling toSQL would modify the builder object.

Affected debugging and things like updateOrInsert where the update call is preceded by an exists call. (c00ecef)

  • *: Fix for insert bindings including other binding types as well (c84ec6c)
  • *: Add @BluewaterSolutions as a contributor (92dd7ad)
  • *: Fix exists method to work across engines

Use the withReturnFormat( "array" ) to get around inconsistencies with queries across CFML engines. (17afdfa)

  • *: Normalize line endings and trim whitespace at the end of lines (bf4ecc7)
  • *: Allow lists to be passed in to whereIn (d0cc901)
  • *: Updated API Docs (bf83436)
  • *: 4.0.0 (ca7049f)
  • *: Fix bug when checking for a "*" column and it was actually an Expression.

Closes #17 (2edaf30)

  • *: Add subSelect method

Closes #18 (79343a0)

  • *: Add returnObject parameter to assist in returning the generated keys from insert statements (dc5242f)
  • *: Add preQBExecute and postQBExecute interception points.

Perfect for logging all queries that are executed!

interceptData includes: sql, bindings, and options. (0c964e5)

  • *: BREAKING CHANGE: Have first return a struct instead of an array.

Closes #20. (4b46fce)

  • *: Add profiling test tooling (25286fd)
  • *: Updated API Docs (aa9db53)
  • *: 3.0.0 (993b0c3)
  • *: Remove list detection since it isn't used in the builder and is causing issues (73f16d2)
  • *: add MIT License (6409438)
  • *: Stylistic fix on the badges (a04e631)
  • *: Add @timmaybrown as a contributor (584f785)
  • *: Add @murphydan as a contributor (2bf3566)
  • *: Add @aliaspooryorik as a contributor (caf9065)
  • *: Add @elpete as a contributor (bb7b8bb)
  • *: Merge branch 'development' (e3a27f6)
  • *: Updated API Docs (b9e04f5)
  • *: 2.1.0 (8dbddd9)
  • *: A couple minor stylistic changes. (80f14e2)
  • *: Update Builder.cfc

Remove a couple blank lines. (b77a87b)

  • *: issue #8 - additional tests for rawExpressions in the array, removed lists as a valid value for array value and refactored validDirections array to be an instance variable aptly named to match the other naming conventions. (8704ff4)
  • *: First stab at implementing the various requirements for issue #8 to accept an array or list as the column argument's value. The array can accept a variety of value formats that can be intermingled if desired. All scenarios will inherit eithe the default direction or the supplied value for the direction argument. (e0b9b63)
  • *: Cache CommandBox for Travis builds (5eb4561)
  • *: Add new API Docs (2c1f19b)
  • *: 2.0.4 (3414ea7)
  • *: Return result from Oracle grammar when record count is 0 (b8a13cd)
  • *: Updated API Docs (c50d061)
  • *: 2.0.3 (8634e5c)
  • *: Updated API Docs (a6df8a3)
  • *: 2.0.2 (f0886b6)
  • *: Add new API Docs package scripts (c8555ec)
  • *: Updated API Docs (95c2d93)
  • *: Nest the apidocs in a different docs site for future better looking docs (9a8e1fa)
  • *: 2.0.1 (6bd958d)
  • *: Add more files to the box ignore (e233853)
  • *: Add docs to the ignore for box install (29017aa)
  • *: Move to the docs folder since that is what GitHub pages looks for. (7c94266)
  • *: 2.0.0 (e1710bf)
  • *: Add API Docs

Commit them for now until commandbox-docbox is fixed and we can do it in Travis. (fa2edae)

  • *: Finish API docs for QB!!!!! (f145d9a)
  • *: 1.6.2 (c6508bb)
  • *: Add a check to only try to remove the QB_RN column when records actually exist in the query. (4d10905)
  • *: A fun refactor using closures of aggregates. Added docblocks to the new with methods. (9b946c4)
  • *: Add docblocks for bindings (ef1970d)
  • *: Add docblocks for insert, update, and delete (bbd7c6a)
  • *: Add new tap method for inspecting a query in process without interrupting chaining. (f9b7432)
  • *: Use util check instead of raw isInstanceOf (6388bfd)
  • *: Better name forPage arguments (0037cdd)
  • *: Add docblocks for where clauses and groups/havings/orders/limits (c396c98)
  • *: Add docblocks for joins (f580f0a)
  • *: Add more to the API docs (0d5dd74)
  • *: Fix WireBox mapping for newly required returnFormat (61d8a14)
  • *: Add missing semicolons (0493b4a)
  • *: Deprecate returningArrays in favor of returnFormat

returnFormat can take a closure or “array” or “query”. Aggregate methods correctly ignore returnFormat

Fixes #6, #7 (f52e25a)

  • *: Add selectRaw helper method. Alias table for `from. (20da7ea)
  • *: Set up bdd with ColdBox Elixir (dc5cf18)
  • *: Add testbox runner and npm package script for tests (7a3ae71)
  • *: 1.6.1 (068d8a0)
  • *: Minor formatting changes

4 spaces for indentation and spaces inside braces with arguments ({}) (73f0856)

  • *: get tests to pass on ACF11 (aadb1f8)
  • *: Use queryExecute instead of Query() for query of query (e2c8cb2)
  • *: 1.6.0 (6db8522)
  • *: Parse column and table aliases without AS in them (9d04a89)
  • *: 1.5.0 (6937d35)
  • *: Add first MSSQL-specific grammar (89b9c84)
  • *: 1.4.0 (b11ea7f)
  • *: Fix failing test setup from adding return format (301d013)
  • *: Provide custom oracle mass insert compilation (d567830)
  • *: Fix return results failing on insert, update, and deletes (61ca2b1)
  • *: Allow passing options in to insert, update, and delete queries (c45fdcd)
  • *: 1.3.0 (8258998)
  • *: Allow a closure to influence return results. (7a633bb)
  • *: 1.2.4 (9ddea67)
  • *: Fix bug with oracle limits, offsets, and Query of Queries (58189fc)
  • *: 1.2.3 (b54ff1b)
  • *: Fix limit and offset for Oracle and remove generated QB_RN column (44849ff)
  • *: 1.2.2 (d36c7ba)
  • *: Update README formatting (a0a3177)
  • *: Use toBeWithCase for SQL statement checks. Add a test about uppercasing Oracle wrapped values. (e14da32)
  • *: Apply the table prefix to the table alias as well. (e5c6c4b)
  • *: 1.2.1 (44752d1)
  • *: Quick fixes for Oracle grammar. Still needs tests (74e14f7)
  • *: Merge branch 'development'
  • development: 1.2.0 Add OracleGrammar WireBox mapping in ModuleConfig Add section on specifying defaultGrammar Update readme with correct Travis badges Add Oracle grammar support with limit and offset Move MySQL Grammar tests to their own file (e4146cb)
  • *: 1.2.0 (a077807)
  • *: Add OracleGrammar WireBox mapping in ModuleConfig (a4499a9)
  • *: Add section on specifying defaultGrammar (cdc0776)
  • *: Update readme with correct Travis badges (d9fce51)
  • *: Add Oracle grammar support with limit and offset (9bea030)
  • *: Move MySQL Grammar tests to their own file (d4a6856)
  • *: 1.2.0 (a33d937)
  • *: Add OracleGrammar WireBox mapping in ModuleConfig (5c202f0)
  • *: Add section on specifying defaultGrammar (c6dcbd5)
  • *: Update readme with correct Travis badges (84a937d)
  • *: Add Oracle grammar support with limit and offset (c9bab7b)
  • *: Move MySQL Grammar tests to their own file (746d190)
  • *: 1.1.2 (511a567)
  • *: Fix two functions to return any to allow for query or array return results (b70b968)
  • *: 1.1.1 (00ac2b0)
  • *: Add MySQLGrammar binding (bbd2717)
  • *: 1.1.0 (fb82230)
  • *: Add initial MySQL Grammar support (77b636c)
  • *: Adding mappings for WireBox. (8771321)
  • *: Remove Oracle Grammar to be implemented at a later time. (8fcb297)
  • *: Add fix for negative values in forPage (10c77ce)
  • *: Add forPage helper to help with pagination. (658af5b)
  • *: Add missing semicolon for ACF (da77797)
  • *: Add havings clause (f1e3f67)
  • *: Use accessor instead of direct variables access. (6f54077)
  • *: Default to returning arrays of structs over queries. (1dd330b)
  • *: Refactor runQuery to run. (789a6c1)
  • *: Allow passing a single column or an array of columns to get to execute the query with those columns once. (338f82c)
  • *: Add value and exist helper query methods. (34f7ddc)
  • *: Implement count, max, min, and sum aggregate methods. (3217de2)
  • *: Default selecting “*” if nothing is passed in to select() (c542425)
  • *: Implement retrieval shortcuts — first, find, get (4440e23)
  • *: Verify raw statements work in select fields (9907bab)
  • *: Minor formatting adjustments (971489e)
  • *: Minor formatting changes (1f41186)
  • *: Remove unused interface (ee85fc7)
  • *: Remove inject helpers. We'll manage that in the ModuleConfig.cfc (71b5e5c)
  • *: Update references to qb and correct version (cb1ffdd)
  • *: Remove ACF 10 support because I want to use member functions. (0b634bd)
  • *: Add import statements for CF11. (ef23bf1)
  • *: Fixes for Adobe engines. (64c19c7)
  • *: Update Travis script (3249f98)
  • *: Add updateOrInsert helper (c30ad18)
  • *: Add exists (c678cf2)
  • *: Add limit and offset (e606102)
  • *: Update readme from Quick to qb (e585a88)
  • *: Rename Quick to qb.

Quick will be the ORM implementation that will use qb underneath the hood. (29b34af)

  • *: Remove the need to return a query in a when callback. (657d47c)
  • *: Insert, Updates, and Deletes! Oh my! (e19dae3)
  • *: Remove unneeded dependency (0452b44)
  • *: Clean up tests and all tests passing! (6e75e61)
  • *: Implement group bys (73f961d)
  • *: Implement when callbacks (ed65e09)
  • *: Refactor to addBindings (7ca0d5e)
  • *: Implement joins (f41bca0)
  • *: Finish implementing where in. All wheres are done! (4d734b3)
  • *: Implement between statements (26f937b)
  • *: Implement null checks (9f86158)
  • *: Refactor to generated getters and setters. (04f80f7)
  • *: Implement where exists (d4174e3)
  • *: Implement table prefixes (edf8f66)
  • *: Finish basic wheres (160f68d)
  • *: Implement select methods (baa72a2)
  • *: Reformat according to new style guidelines (fadb882)
  • *: Add sublime project file (9e1cd9c)
  • *: Round out failing tests. Time to start implementing (bb54d35)
  • *: Add more failing query/grammar tests (0d874c5)
  • *: Add a bunch of failing tests for builder+grammar interaction (532ffdb)
  • *: Update to the latest Travis CI multi-engine file (52c647c)
  • *: Add comments about ACF10 making life sad. (bc482d1)
  • *: Clarify that PLATFORM is really an ENGINE (cc328fb)
  • *: Add Travis build badge to README. (0856b69)
  • *: Remove unneeded files now that the testing script is inline. (1ce41ba)
  • *: Move script in to travis.yml file. (18c1f2e)
  • *: Add a sleep call to make sure the server has time to spin up. (96c4cf5)
  • *: Specify required CFML versions. (cce8483)
  • *: Major refactoring to support ACF10 (3abeb67)
  • *: Specify that Lucee 5 is a snapshot version. (cfd0d23)
  • *: Switch to the latest version of CommandBox for multi-server options. (cefa79d)
  • *: Add test result properties file to gitignore (a19ea45)
  • *: Add a gitkeep file to the tests results path so tests can run on Travis. (5687ae0)
  • *: Try to add travis support for multiple cf engines. (2833375)
  • *: Add README (369e3c7)
  • *: Move the list and array inferSqlType tests to the right block. (917f132)
  • *: Infer the sql type of lists and arrays based on if all the members share the same sql type; otherwise, default to CF_SQL_VARCHAR. (7ae2548)
  • *: Added orWhere{Column} dynamic method matching. (b221bcd)
  • *: Add whereIn and whereNotIn helper methods. (118db23)
  • *: Return the Builder to continue chaining on dynamic where methods. (202127a)
  • *: Add list functionality to the QueryUtils extractBinding (80dc5b0)
  • *: Wrap the parameters in an "IN" or "NOT IN" clause. (c69cae3)
  • *: Simplify the operator list (4ae3cf1)
  • *: Upper case operators in SQL strings. (d7ba404)
  • *: Unify exception types for invalid operators and combinators (c4b9d68)
  • *: Don't open the browser automatically on server start. (Use gulp watch instead for BrowserSync.) :-) (623517f)
  • *: Refactor to Wirebox injection. (54bc5e0)
  • *: Infer the cfsqltype on bindings. (3f53bd5)
  • *: Refactor to new QueryUtils file for shared functionality. (426e72d)
  • *: Refactor bindings to use structs instead of values in preparation for cfsqltypes. (90fc19c)
  • *: Also allow the shortcut where syntax for the on method. (c67bd66)
  • *: Allow the shortcut where statement in joins. (28fc828)
  • *: Add join query bindings. (ad911fa)
  • *: Fix the SQL compilation order. (ccbc273)
  • *: Allow default settings with user overrides in the ModuleConfig. (f2d2441)
  • *: Fixes for new Quick module mapping. (1caa4bc)
  • *: Add box scripts to workflow (23409ce)
  • *: 0.1.1 (ad26504)
  • *: Fix for mappings to work correctly in modules. (7502394)
  • *: Allow the join closure to be passed in as the second positional argument. (9efbe5b)
  • *: Work on Join clauses (fb25c48)
  • *: Implement joins (c1f3228)
  • *: Enable distinct flag. Clean up duplication in tests. Move src/ to models/ (7a83500)
  • *: Set up BrowserSync with ColdBox Elixir (8109613)
  • *: Always upper case the combinator. (b4b8e2b)
  • *: Validate combinators (e3bd0fe)
  • *: Compile where statements (e403216)
  • *: Simple query execution (a2b1090)
  • *: Allow specifying the combinator (AND or OR) . (eb3d6e0)
  • *: Add where values to the SQL bindings array. (8dc4a47)
  • *: Use ColdBox Elixir (9925fe6)
  • *: Run tests through CommandBox (a2c350f)
  • *: Just dump everything we'd been working on. (9ff2c6c)
  • *: Initial commit (00d24a6)

perf

  • QueryBuilder: Replace normalizeToArray with simpler Array check

normalizeToArray handles the case where variadic arguments are passed in. This comes at a cost, about 50 ms.

Speed is everything when testing against a database. (d54bcce)

  • BaseGrammar: Avoid isInstanceOf in wrapColumn

isInstanceOf takes about 30-40 ms per column. For just one table with 6 columns, this is close to a quarter of a second. This adds up.

Instead, just checking if the variable is an object that has a getSQL key (which we assume is a method), we save all of that time. (15042ce)

v5.7.0

17 Aug 2018 — 20:51: 49 UTC

feat

  • QueryBuilder: Add support for Common Table Expressions (3e10da6)
  • QueryBuilder: Derived and Sub Tables (b3f0461)
  • QueryBuilder: Unions (59028a8)

fix

  • QueryBuilder: Fix JoinClause return value (5d113c7)

v5.5.0

07 Jun 2018 — 03:00: 22 UTC

feat

  • QueryBuilder: Add andWhere method for more readable chains. (309f4d8)

other

v5.4.1

27 Apr 2018 — 22:48: 54 UTC

fix

  • PostgresGrammar: Fix typo in getAllTableNames (91caf6a)
  • SchemaBuilder: Fix dropping foreign keys in MySQL (8895447)

other

v5.4.0

16 Apr 2018 — 21:36: 02 UTC

feat

  • AutoDiscover: Allow for runtime discovery (700948a)

other

v5.3.1

28 Mar 2018 — 22:12: 45 UTC

fix

  • ModuleConfig: Fix logic for determining CommandBox vs ColdBox environment (5c66466)

other

v5.3.0

26 Mar 2018 — 16:15: 55 UTC

chore

  • README: Update references to elpete to coldbox-modules (bc7c99c)

feat

  • ModuleConfig: Auto discover grammar by default. (b2347ae)

fix

  • ModuleConfig: Add PostgresGrammar alias to WireBox (eca03f0)

other

v5.2.1

14 Mar 2018 — 03:18: 19 UTC

fix

  • QueryBuilder: Preserve returnFormat when creating a new builder (4538947)

other

v5.2.0

12 Mar 2018 — 21:33: 37 UTC

feat

  • Grammar: Added official support for MSSQL, Oracle, and Postgres. (#34) (733dae3)

other

v5.1.2

20 Feb 2018 — 06:59: 54 UTC

other

perf

  • QueryBuilder: Replace normalizeToArray with simpler Array check (d54bcce)
  • BaseGrammar: Avoid isInstanceOf in wrapColumn (15042ce)

v5.1.1

19 Feb 2018 — 18:03: 58 UTC

fix

  • MySQLGrammar: Default to CURRENT_TIMESTAMP for timestamp columns (#32) (680750a)

other

v5.1.0

16 Feb 2018 — 22:23: 59 UTC

feat

  • SchemaBuilder: Add dropAllObjects action. (#31) (c3e23b5)

other

v5.0.3

16 Feb 2018 — 21:10: 33 UTC

chore

  • build: Enable commandbox-semantic-release (0fe689f)

errors

  • schema: Better error message when passing in a TableIndex to create column (f91a3f7)

other

  • *: Updated API Docs (dfd9510)
  • *: Update references from Builder to QueryBuilder (632e697)
  • *: Updated API Docs (8325db5)

$ box install qb

No collaborators yet.
     
5.00 / 3
  • {{ getFullDate("2016-12-07T13:03:02Z") }}
  • {{ getFullDate("2024-11-13T23:39:31Z") }}
  • 44,962
  • 468,197